It’s about getting things down to one number. Using stats the way we read them, we’ll find the value in players that nobody else can see. Peter Brand in Moneyball

O ano é 2001. Você foi contratado para ajudar a aproveitar ao máximo o orçamento cada vez menor de jogadores do time de beisebol Oakland Athletics. Todos os anos, times de elite contratam novos jogadores de beisebol. Infelizmente, você está com poucos jogadores famosos – e com poucos fundos. Porém, com um pouco de SQL e um pouco de sorte, quem disse que ainda não é possível criar uma equipe que desafie as expectativas?

Com um banco de dados chamado moneyball.db – que contém informações sobre jogadores, seu desempenho e seus salários – ajude o Oakland Athletics a encontrar o valor em jogadores que outros podem perder.

As informações estão contidas no banco de dados moneyball.db BAIXAR

Schema


moneyball.db representa todos os jogadores, equipes, salários e desempenhos da Liga Principal de Beisebol até 2001. Em particular, moneyball.db representa as seguintes entidades:

Dentro de moneyball.db, você encontrará diversas tabelas que implementam os relacionamentos descritos no diagrama acima. Clique nos menus suspensos abaixo para saber mais sobre o esquema de cada tabela individual.

tabela players (jogadores)

A tabela players contém as seguintes colunas:

  • id: identifica o id do djogador
  • first_name: o primeiro nome do jogador
  • last_name: último nome do jogador
  • bats: é o lado em que o jogador rebate (“L” para left e “R” para right)
  • throws: é a mão que o jogador usa para lançar a bola (“L” para left e “R” para right)
  • weight: o peso do jogador em libras
  • height: a altura do jogador em polegadas
  • debut: a data (expressa como YYYY-MM-DD) em que o jogador fez seu primeiro jogo
  • final_game: a data (expressa como YYYY-MM-DD) em que o jogador fez seu último jogo
  • birth_year: ano em que o jogador nasceu
  • birth_month: mês em que o jogador nasceu
  • birth_day: dia em que o jogador nasceu
  • birth_city: cidade em que o jogador nasceu
  • birth_state: estado em que o jogador nasceu
  • birth_country: país em que o jogador nasceu
tabela teams (times)

A tabela teams contém as seguintes colunas:

  • id: identifica o id de cada time
  • year: ano em que o time foi formado
  • name: o nome do time
  • park: o nome do parque em que o time joga (ou jogava)
tabela performances (performances)

A tabela performances contém as seguintes colunas:

  • id: identifica o id da performance
  • player_id: id do jogador que teve a performance
  • team_id: id do time para o qual o jogador teve a performance
  • year: ano em que o jogador teve a performance
  • G: número de jogos que o jogador fez, para aquela time, naquele ano
  • AB: que é o número de “preparos de rebatidas” do jogador (ou seja, vezes em que ele levantou o taco para rebater), para um determinado time, em um determinado ano
  • H: que é o número de rebatidas do jogador, para um determinado time, em um determinado ano
  • 2B: que é o número de duplas (rebatidas de duas bases) do jogador, para um determinado time, em um determinado ano
  • 3B: que é o número de triplos (rebatidas de três bases) do jogador, para um determinado time, em um determinado ano
  • HR: que é o número de home runs do jogador, para um determinado time, em um determinado ano
  • RBI: que é o número de “corridas impulsionadas” do jogador (ou seja, corridas marcadas), para uma determinada equipe, em um determinado ano
  • SB: que é o número de bases roubadas do jogador, para um determinado time, em um determinado ano
tabela salaries (salários)

A tabela salaries contém as seguintes colunas:

  • id: identifica o id do salário
  • player_id: id do jogador que recebe o salário
  • team_id: id do time que está pagando o salário
  • year: o ano em que o salário foi pago

Problema para resolver


Para cada uma das perguntas a seguir, você deve escrever uma única query SQL que produza os resultados especificados por cada problema. Sua resposta deve assumir a forma de uma única consulta SQL.

  1. Você deve começar estudando como os salários médios dos jogadores mudaram ao longo do tempo. Escreva uma consulta SQL para encontrar o salário médio dos jogadores por ano.
  1. Seu gerente geral (ou seja, a pessoa que toma decisões sobre os contratos dos jogadores) pergunta se o time deveria trocar um jogador atual por Cal Ripken Jr., um craque que provavelmente está se aposentando. Escreva uma consulta SQL para encontrar o histórico salarial de Cal Ripken Jr (ordene por ano de forma decrescente).

  2. Seu time vai precisar de um grande rebatedor de home runs. Ken Griffey Jr., vencedor de longa data dos prêmios Silver Slugger e Gold Glove, pode ser uma boa opção. Escreva uma consulta SQL para encontrar o histórico de home runs de Ken Griffey Jr.

  1. Você precisa fazer uma recomendação sobre quais jogadores o time deve considerar contratar. Com o orçamento cada vez menor do time, o gerente geral quer saber quais jogadores receberam os salários mais baixos em 2001. Escreva uma consulta SQL para encontrar os 50 jogadores que menos receberam em 2001.
  1. Escreva uma consulta SQL para encontrar todos os times pelos quais Satchel Paige jogou.

  2. Escreva uma consulta SQL para retornar os 5 melhores times, classificados pelo número total de acertos dos jogadores em 2001.

  3. Você precisa fazer uma recomendação sobre qual jogador (ou jogadores) evitar o recrutamento. Escreva uma consulta SQL para encontrar o nome do jogador que recebeu o salário mais alto de todos os tempos.

  4. Quanto precisariam pagar para conseguir o melhor rebatedor de home run da temporada passada? Escreva uma consulta SQL para encontrar o salário (DE 2001) do jogador que acertou mais home runs em 2001.

  5. Quais salários as outras equipes estão pagando? Escreva uma consulta SQL para encontrar as 5 equipes com salários mais baixos (por salário médio) em 2001.

  1. O gerente geral pediu a você um relatório que detalha o nome de cada jogador, seu salário por ano em que jogou e o número de home runs em cada ano em que jogou. Para ser mais preciso, a tabela deve incluir:

(Considere um caso secundário: suponha que um jogador tenha vários salários ou desempenhos em um determinado ano. Ordene-os primeiro pelo número de home runs, em ordem decrescente, seguido pelo salário, em ordem decrescente.) Tenha o cuidado de garantir que, para uma única linha, o ano do salário e o ano do desempenho correspondam.

tabela exemplo

Para ajudá-lo a visualizar o que o gerente geral gostaria, eles lhe deram uma tabela de exemplo:

first_name last_name salary year HR
Don Aase 400000 1989 0
Don Aase 675000 1988 0
Don Aase 625000 1987 0
Don Aase 600000 1986 0
Jeff Abbott 300000 2001 0
Jeff Abbott 255000 2000 3
Jeff Abbott 255000 1999 2

Se tudo correr bem, você também poderá ver duas linhas como esta em sua tabela final:

first_name last_name salary year HR
Todd Zeile 3700000 1995 9
Todd Zeile 3700000 1995 5


  1. Você precisa de um jogador que consiga acertar. Quem pode ser o mais subestimado? Escreva uma consulta SQL para encontrar os 10 jogadores mais baratos por hit em 2001.
  1. Rebatidas são ótima, mas os RBIs (“runs batted in” - corridas marcadas) também! Escreva uma consulta SQL para encontrar os 10 jogadores mais baratos por hit E entre mais baratos por RBI.